package ar.uba.fi.taller2.cmmiassistant.frontend.evaluacion.editorescalificacion;

import java.util.Collection;
import java.util.Collections;

import ar.uba.fi.taller2.cmmiassistant.controlador.Controlador;
import ar.uba.fi.taller2.cmmiassistant.frontend.evaluacion.EditorCalificacion;
import ar.uba.fi.taller2.cmmiassistant.frontend.evaluacion.util.PracticaConversorEvaluables;
import ar.uba.fi.taller2.cmmiassistant.modelo.Organizacion;
import ar.uba.fi.taller2.cmmiassistant.modelo.aplicacion.Seleccion;
import ar.uba.fi.taller2.cmmiassistant.modelo.evaluacion.Evaluacion;
import ar.uba.fi.taller2.cmmiassistant.modelo.evaluacion.Instancia;
import ar.uba.fi.taller2.cmmiassistant.observador.Observable;
import ar.uba.fi.taller2.cmmiassistant.observador.Observador;
import ar.uba.fi.taller2.cmmiassistant.observador.ServicioNotificacion;
import ar.uba.fi.taller2.cmmiassistant.vista.Estado;
import ar.uba.fi.taller2.cmmiassistant.vista.Vista;

public class EditorCalificacionPracticas extends EditorCalificacion {
	private static final long serialVersionUID = -7218120855400528464L;

	public EditorCalificacionPracticas(Vista contexto) {
		super(contexto, new PracticaConversorEvaluables());
	}

	@Override
	public Estado getEstado() {
		return Estado.EDITANDO_EVALUACION_PRACTICAS;
	}

	private final Observador observadorModelo = new Observador() {

		public void cambio(Observable entidad) {

			EditorCalificacionPracticas.this.cargar();
		}
	};

	@Override
	public Collection<?> getItems() {
		Evaluacion evaluacion = getControlador().getModelo()
				.getEvaluacionSeleccionada().getValor();
		if (evaluacion != null) {
			return evaluacion.getPracticas();
		} else {
			return Collections.EMPTY_SET;
		}

	}

	@Override
	public void setControlador(Controlador controlador) {
		super.setControlador(controlador);
		Seleccion<Instancia> seleccion = this.getModelo()
				.getInstanciaSeleccionada();
		Seleccion<Evaluacion> seleccionEvaluacion = this.getModelo()
			.getEvaluacionSeleccionada();
		ServicioNotificacion.addObservador(seleccion, this.observadorModelo);
		ServicioNotificacion.addObservador(seleccionEvaluacion, this.observadorModelo);
		cargar();
		
	}

}
